import * as Entity from "./index"
export interface AllEntityTypes
{
    InnerMineEntity:Entity.InnerMineEntity,
    SpawnEntity:Entity.SpawnEntity
    OutMineEntity:Entity.OutMineEntity
    CoreEntity:Entity.CoreEntity
    // ControllerEntity:Entity.ControllerEntity
    TeamUpgrader:Entity.TeamUpgrader
    TeamDefender:Entity.TeamDefender
    MinerialEntity:Entity.MinerialEntity
    LabEntity:Entity.LabEntity
    OutMinerialEntity:Entity.OutMinerialEntity
    Team2:Entity.Team2
    Team4:Entity.Team4
    Team9:Entity.Team9
}
export type WarTeamType = "TeamDefender";
export type EntityType = keyof AllEntityTypes

export type ExucuteType = EntityType|"Creep"|"Room"|"PowerCreep"

export interface IEntity<U extends INoMemory=INoMemory,I extends IEntityInitializer=IEntityInitializer > extends ITEntity<AllEntityTypes,U> 
{
  
    GUID() :string
    // initAttributes():void
    getEntityByID<T extends AllEntityTypes[EntityType]>(id:string):T;
    getEntity<T extends EntityType>(type:T,region:string):AllEntityTypes[T]
    getEntitys<T extends EntityType>(type:T,region:string):AllEntityTypes[T][]
    getNodeMemory():U
    removeEntityByID(id:string):boolean
    getNodeHeap (): any
    entityType():ExucuteType
    log(type:LogType,...arg:any[]):void
    clearAction():void
}